
import Config from './config.json';
import Utils from './utils';

import Html5Recorder from './html5/html5recorder';

/**
 * 初始化录音机实例的默认值。<br/>
 *
 * @name Default_recorder_options
 * @global
 * @constant
 * @property {string=} server - 指定SDK的评分服务器地址。默认值: ws://cloud.chivox.com
 * @property {string=} bak_server - 指定SDK的评分备份服务器地址。默认值: ''
 * @property {string} appKey - 指定录音机使用的appKey（由驰声提供）。**必填**
 * @property {string} sigurl - 指定录音机获取sig和timestamp的服务器地址（sig算法由驰声提供）。**必填**
 * @property {string=} recorderid - 指定录音机渲染在当前页面的DOM节点ID。默认值: chivox-recorder
 * @property {Object} data - 参数解释详见：{@link Default_ChiVoxSDK_Options}
 * @property {int} width - 录音机的波形图宽度, 默认值220px。
 * @property {int} height - 录音机的波形图高度, 默认值140px。
 * @property {boolean} showFlash - Flash模式下是否显示Flash。默认：true
 * @property {string} backgroundColor - Flash模式下显示Flash的背景, 默认："0x00fffff"。(已过期)
 * @property {string} wmode - Flash模式下显示Flash的的模式。默认值："transparent"
 * @property {callback} onInit - 录音机初始化完成后的Callback调用。格式：(code, message) => {}
 * @property {callback} onError - 录音机初始化或运行期间出错时的Callback调用。格式：(error) => {}
 * @property {callback} onConnectorStatusChange - 录音机与服务器的连接状态发生变化时的Callback调用。格式：(code, message) => {}
 * @property {callback} onMicStatusChange - Flash模式下，麦克风状态发生变化时的Callback调用。格式：() => {}
 *
 */
const Default_recorder_options = {
    recorderid: 'chivox-recorder',
    appKey: '',
    server: (document.location.protocol == "https:" ? "wss://" : "ws://") + Config.server,
    bak_server: null,
    sigurl: '',
    alg:'sha1',
    data: null,
    showFlash: true,
    backgroundColor: '0x00fffff',
    width: 220,
    height: 140,
    wmode: 'transparent',
    onInit: function(errno, err) {},
    onError: null,
    onConnectorStatusChange: function() {},
    onMicStatusChange: function() {}
};

/**
 * RecorderBuilder类。<br/><br/>
 *
 * @param {Object} options - 初始化参数。格式参见：{@link Default_ChiVoxRecorder_Options}
 * @return {Object} - 指定模式的录音机实例。(Html5Recorder或FlashRecorder的实例)
 */

class CreateRecorder {

    static build(options,complete) {
        let recorder = null;
        options = Utils.extend(options, Default_recorder_options, true);
        recorder =  new Html5Recorder({
            appKey: options.appKey,
            sigurl: options.sigurl,
            server:options.server,
            micWatch:options.micWatch,
            alg:options.alg,
            signature: options.signature,
            onInit: function (mess) {
               options.onInit(mess);
            },
            onError: function (err) {
               complete(err);
            }
        });
        return recorder;
    }
}

export default CreateRecorder;
